//
//  UIViewController+ACExt.h
//  ACFramework
//
//  Created by caoyq on 2018/5/23.
//

#import <UIKit/UIKit.h>

@interface UIViewController (ACExt)

#pragma mark - Push + Pop

/**
 判断当前控制器进栈(push)还是出栈(pop).
 
 一般在 viewWillDisappear 使用，可以获取到当前控制器是继续push到下一层还是pop回上一层.
 
 注意：多个相同控制器的跳转，也能够判断出push或pop

 @return YES：表示为Push，NO：表示pop或者其他
 */
- (BOOL)ac_isPush;

/**
 present 到下一级页面，默认动画为YES.
 
 @param vc 下级控制器
 */
- (void)ac_presentViewController: (UIViewController *)vc;

/**
 push 到下一级页面，默认动画为YES.
 
 @param vc 下级控制器
 */
- (void)ac_pushViewController: (UIViewController *)vc;

/**
 pop 到上一级页面，默认动画为YES.
 */
- (void)ac_popViewController;

/**
 pop 到第任意个控制器页面
 
 @param index 需要pop的页面个数，下标从 1 开始
 */
- (void)ac_popToViewControllerAtIndex: (NSInteger)index;

#pragma mark - 获取控制器

/**
 得到第任意层的控制器
 
 @param index 层数
 @return instance of UIViewController.
 */
- (UIViewController *)ac_viewControllersAtIndex: (NSInteger)index;

/**
 * 获取导航栈中最顶层的控制器
 *
 * 场景：在非导航控制器中，获取导航控制器
 */
- (UIViewController *)ac_topViewController;

@end
